// controllers/aliyunAsrController.js
// 阿里云语音识别控制器（备用方案）

const axios = require('axios');
const Core = require('@alicloud/pop-core');

// 阿里云ASR配置（需要在.env文件中配置）
const ALIYUN_ASR_ENDPOINT = 'http://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/asr';
const ALIYUN_ACCESS_KEY_ID = process.env.ALIYUN_ACCESS_KEY_ID || '';
const ALIYUN_ACCESS_KEY_SECRET = process.env.ALIYUN_ACCESS_KEY_SECRET || '';

// 检查配置
if (!ALIYUN_ACCESS_KEY_ID || !ALIYUN_ACCESS_KEY_SECRET) {
  console.warn('警告：阿里云ASR配置未完成，将使用Whisper作为默认识别服务');
}

/**
 * 使用阿里云ASR服务进行语音识别
 * @param {Buffer} audioBuffer - 音频数据缓冲区
 * @param {string} audioFormat - 音频格式 (wav, pcm, opus等)
 */
async function transcribeWithAliyunASR(audioBuffer, audioFormat = 'wav') {
  if (!ALIYUN_ACCESS_KEY_ID || !ALIYUN_ACCESS_KEY_SECRET) {
    throw new Error('阿里云ASR服务未配置');
  }

  try {
    // 创建阿里云客户端（用于获取令牌）
    const metaClient = new Core({
      accessKeyId: ALIYUN_ACCESS_KEY_ID,
      accessKeySecret: ALIYUN_ACCESS_KEY_SECRET,
      endpoint: 'http://nls-meta.cn-shanghai.aliyuncs.com',
      apiVersion: '2019-02-28'
    });

    // 获取访问令牌
    const tokenResponse = await metaClient.request('NlsToken', {
      Action: 'CreateToken'
    }, {
      method: 'POST'
    });

    const token = tokenResponse.Token.Id; // 修正TokenId的获取方式

    // 构建请求参数
    const params = {
      appkey: process.env.ALIYUN_ASR_APPKEY || '',
      format: audioFormat,
      sample_rate: 16000,
      enable_intermediate_result: false,
      enable_punctuation: true,
      enable_inverse_text_normalization: true
    };

    // 构建请求URL
    const url = `${ALIYUN_ASR_ENDPOINT}?${new URLSearchParams(params).toString()}`;

    // 发送请求到ASR服务
    const response = await axios.post(url, audioBuffer, {
      headers: {
        'Content-Type': 'application/octet-stream',
        'X-NLS-Token': token
      },
      timeout: 30000
    });

    return response.data.result;
  } catch (error) {
    console.error('阿里云ASR识别失败:', error.response ? error.response.data : error.message);
    throw new Error('阿里云ASR识别失败: ' + (error.response?.data?.message || error.message));
  }
}

/**
 * 转录音频文件（主控制器方法）
 */
exports.transcribeAudioAliyun = async (req, res) => {
  // 如果阿里云配置不完整，回退到Whisper
  if (!ALIYUN_ACCESS_KEY_ID || !ALIYUN_ACCESS_KEY_SECRET) {
    return res.status(501).json({ 
      msg: '阿里云ASR服务未配置，回退到Whisper服务',
      fallback: true
    });
  }

  if (!req.file) {
    return res.status(400).json({ msg: 'No audio file uploaded.' });
  }

  try {
    // 调用阿里云ASR服务
    const result = await transcribeWithAliyunASR(req.file.buffer, 'wav');
    
    res.json({ 
      result: result,
      service: 'aliyun_asr'
    });
  } catch (error) {
    console.error('阿里云ASR转录错误:', error);
    res.status(500).send('阿里云ASR转录过程中出现错误: ' + error.message);
  }
};

// 导出函数供其他模块使用
module.exports.transcribeWithAliyunASR = transcribeWithAliyunASR;